//引入express模块
const express = require("express");

const cors = require("cors");
//引入用户路由器模块
const ur = require("./routes/user.js");
//创建WEB服务器
const app = express();

// 导入bodyParser插件，它帮助我们获取前端post请求传过来的参数
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));

//导入上传文件中间件，能帮助我们实现接收文件的接口
const multer = require("multer");
//接收到的文件放uploads文件夹
const upload = multer({ dest: "uploads/" });
//使得让外部通过链接可以访问这个文件夹里文件（ 地址 + 端口 / 文件名 ）便可访问
app.use(express.static("uploads"));
//使用接收文件基本接口模板，可到官网查看更详细的
/* app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
}) */

// 导入knex插件，他能帮助我们连接MySQL数据库
const knex = require("knex")({
  client: "mysql",
  //填入数据库的地址、账号、密码、库名
  connection: {
    host: "127.0.0.1",
    user: "root",
    password: "",
    database: "library",
  },
});

// CORS:在服务器添加白名单,允许来自其他来源的访问即可
// app.all('*', (req, res, next) => {
//   res.header('Access-Control-Allow-Origin', '*')
//   next()
// })
// app.use(cors())

app.use(
  cors({
    origin: ["http://127.0.0.1:8080", "http://localhost:8080"],
  })
);

//设置端口
app.listen(3000, () => {
  console.log("服务器启动成功,端口3000");
});
//将所有post传递的参数转为对象
app.use(
  express.urlencoded({
    extended: true,
  })
);
//使用路由器，将所有的路由挂载到WEB服务器
//给用户路由器下所有路由添加前缀 /v1/library
app.use("/v1/library", ur);

//添加路由
//26.修改chatdetails话题点赞(put /)
//实现新增（上传图片）接口，post请求，参数为 icon ！！！
//接口地址：http://127.0.0.1:3000/v1/library/comic/add

app.post("/comic/add", upload.single("icon"), (req, response) => {
  // req.file得到前端发送回来的文件信息，req.body的到文件文本信息
  const { file, body } = req;
  //判断是否发送的是空文件回来
  if (file == undefined) {
    response.send({ code: 400, msg: "新增失败,参数缺失" });
  } else {
    //利用kenx在数据库完成新增操作，保存文件名字段
    //相当于 insert into comic （icon）values（file.filename）
    knex("comic")
      .insert({ icon: file.filename })
      .then((res) => {
        response.send({ code: 200, msg: "新增成功" });
      });
  }
});

//添加路由
//27.
//实现查询接口，就是要返回图片给前端显示
//接口地址：http://127.0.0.1:3000/v1/library/comic/all

app.get("/comic/all", (req, response) => {
  // 相当于 select * from comic orderby ccid desc limit 1
  knex("comic")
    .select()
    .orderBy("ccid", "desc")
    .limit(1)
    .then((res) => {
      if (res.length === 0) {
        response.send({ code: 200, msg: "暂无数据" });
      } else {
        response.send({ code: 200, msg: "查询成功", data: res });
      }
    });
});

//在所有路由的后边，添加错误处理中间件，拦截所有路由的错误
app.use((err, req, res, next) => {
  //err接收的传递过来的错误
  if (err) {
    //为了调试，需要查看错误原因
    console.log(err);
  }
  //响应服务器端错误
  res.send({ code: 502, msg: "服务器端错误" });
});
